/**
 * Copyright (c) 2007,中企动力华南研发中心<br>
 * All rights reserved.
 */
package com.ce.pms.charge.dao;

import java.util.List;
import java.util.Map;

import com.ce.pms.base.dao.IPmsBaseDao;
import com.ce.pms.charge.model.NoteDomain;
import com.ce.pms.charge.model.PeriodDomain;
import com.ce.pms.charge.vo.ManageHouseBankBean;
import com.ce.pms.charge.vo.NoteVO;
import com.ce.pms.charge.vo.PeriodVO;
import com.ce.pms.charge.vo.TransRNoteVO;
import com.ce.pms.charge.vo.TransrnoteNote;
import com.ce.pms.report.vo.PrintChargeNoteBean;
import com.sitechasia.webx.core.support.Page;

/**
 * 功能描述：通知单<br>
 * @author 罗军林 创建日期：2008-9-17
 */
public interface INoteDao extends IPmsBaseDao<NoteDomain> {
	public Page queryNote(NoteVO searchVO);
	public Page queryTransRNoteByNoteId(NoteVO notevo);

	/**
	 * 功能描述:判断生成通知单的条件是否满足,如果可以生成，返回true<br>
	 * @return<br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-18<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public boolean checkIsBuildNote();

	/**
	 * 功能描述:读取满足生成通知单条件的管理区(用户有权限生成通知单，已做应收计算且未生成通知单，全部数据已计算的所有管理区)<br>
	 * @return<br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-18<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public List<PeriodDomain> queryPrechinct();

	/**
	 * 功能描述:查询指定管理区下的所有管理房-产权房关系<br>
	 * @param prechinctId 收费管理区ID
	 * @return key:产权房ID value:管理房ID<br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-18<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public Map<Long,Long> queryManageHouse(Long prechinctId);

	/**
	 * 功能描述:查询交易(读取这些楼栋对应的产权房，及相关的交易，按房屋、交易码分组统计应收金额，
	 * 去除应收总额为0的收费项目，查询相关的银行账号。<br>
	 * @param periodId<br>
	 * @param prechinctId<br>
	 * @param pageNO<br>
	 * @param pageSize<br>
	 * @return <br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-18<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public List<TransrnoteNote> queryTran(Long periodId,Long prechinctId,String houseIds,int pageNO,int pageSize);


	/**
	 * 功能描述:取得当前拥有通知单的数量<br>
	 * @param periodId
	 * @return<br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-19<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public int getCountNote(Long periodId,boolean isReminder);

	/**
	 * 功能描述:批量插入通知单明细<br>
	 * @param transNoteList<br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-22<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public void insertTransRNote(List<TransRNoteVO> transNoteList);

	/**
	 * 功能描述:查询管理区下的所有管理房银行帐号。key 管理房ID，value 银行帐号<br>
	 * @return<br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-23<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public Map<Long,ManageHouseBankBean> queryManageAccNumber();

	/**
	 * 功能描述:批量插入通知单<br>
	 * @param userId
	 * @param manageHouseTransrnoteNoteMap<br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-23<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public void insertNote(Long userId,Map<Long,TransrnoteNote> manageHouseTransrnoteNoteMap);

	/**
	 * 功能描述:检查能否重新生成通知单<br>
	 * @param houseIds
	 * @return<br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-24<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public boolean checkIsReBuild(String houseIds);

	/**
	 * 功能描述:查询所选房间所属的收费周期及其相关产权房ID<br>
	 * @param houseIds 房号ID列表，管理房、产权房ID都可以
	 * @return key：收费周期ID value:房号id列表<br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-24<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public Map<Long,String> queryPeriodHouseIds(String houseIds);

	/**
	 * 功能描述:作废指定收费周期指定房号的通知单<br>
	 * @param periodId
	 * @param preinctId
	 * @param houseIds 房号ID列表，管理房、产权房ID都可以
	 * @return key：收费周期ID value:房号id列表<br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-24<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public void blankOutNote(Long periodId,Long preinctId,String houseIds);

	/**
	 * 功能描述:作废指定收费周期下的所有通知单<br>
	 * @param periodId
	 * Create author:罗军林<br>
	 * Create on:2008-9-24<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public void blankOutNoteAll(Long periodId);

	/**
	 * 功能描述:检查能否重新生成全部通知单<br>
	 * @return<br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-24<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public boolean checkIsReBuildAll();

	/**
	 * 功能描述:读取满足生成通知单条件的管理区(用户有权限生成通知单，已生成通知单，全部数据已计算的所有管理区)<br>
	 * @return<br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-18<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public List<PeriodDomain> queryIsBuildPeriodHQL();

	/**
	 * 功能描述:查询打印通知单<br>
	 * @param periodId
	 * @param noteId
	 * @return<br>
	 * Create author:罗军林<br>
	 * Create on:2008-10-9<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public List<PrintChargeNoteBean> queryPrintChargeNote(NoteVO searchVO);
}
